﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MSRoboticsFramework.ActuatorLayer.CompoundActuators
{
    public interface ISteeringVehicle
    {
        /// <summary>
        /// The steering angle of the vehicle in relation to its initial position
        /// when the class instance was created. A value ranging from -1 to 1,
        /// where 0 is centered (the initial position), -1 is maximum left steering
        /// and 1 is maximum right steering.
        /// 
        /// Values out of bounds will be translated into maximum or minimum values.
        /// </summary>
        public float SteeringAngle { get; set; }

        /// <summary>
        /// The speed of the vehicle. A decimal value ranging between 0 and 1,
        /// where 0 is stoped and 1 is maximum speed. The speed value affects all motion
        /// operations over the motor.
        /// </summary>
        public float Speed { get; set; }

        /// <summary>
        /// Asynchronously make the motor turn forward indefinitely.
        /// </summary>
        public void Forward();

        /// <summary>
        /// Asynchronously make the motor turn backward indefinitely.
        /// </summary>
        public void Backward();

        /// <summary>
        /// Brake the vehicle.
        /// </summary>
        public void Brake();

        /// <summary>
        /// Let the vehicle coast.
        /// </summary>
        public void Coast();
    }
}
